package com.example.dbg.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.dbg.common.utils.DBGDateUtils;
import com.example.dbg.mapper.CuPasswordMapper;
import com.example.dbg.model.po.CuPassword;
import com.example.dbg.service.ICuPasswordService;
import org.springframework.stereotype.Service;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @user DBG_ZXX
 * @date 2018/10/19 10:17
 * @desc
 **/
@Service
public class CuPasswordServiceImpl extends ServiceImpl<CuPasswordMapper,CuPassword> implements ICuPasswordService {

    @Override
    public List<CuPassword> slectPwdList(int cuUserId) {

        return list(new QueryWrapper<CuPassword>().eq("cu_user_id" ,cuUserId));
    }

    @Override
    public boolean insertPwd(CuPassword cuPassword) {

        return  save(cuPassword);
    }

    @Override
    public boolean deletePwd(int id) {

        return removeById(id);
    }

    @Override
    public boolean deletePwds(List<Integer> ids) {

        return removeByIds(ids);
    }

    @Override
    public boolean updatePwd(CuPassword cuPassword) {

        return saveOrUpdate(cuPassword);
    }

    @Override
    public CuPassword selectOneById(int id) {

        return getById(id);
    }

    @Override
    public List<CuPassword> getListByTimeAndName(String begin , String end ,int cuUserId , String name) {

        // 如果bengin  end 搜索条件为空，则以name搜索条件为主
        if (StringUtils.checkValNull(begin) && StringUtils.checkValNull(end)){
            return list(new QueryWrapper<CuPassword>().eq("cu_user_id" , cuUserId).like("name",name)
                    .or().like("login_name",name).or().like("login_pwd",name)
                    .or().like("remark",name));
        }

        Date beginDate = null;
        Date endDate = null;

        // 搜索条件 一个为空的时候 默认规则为，begin为 0，end为系统时间
        if (StringUtils.checkValNull(begin)){
            beginDate = new Date(0);
        }
        // 判断搜索结束时间段是否为空 或者是否为系统当天时间，通过end判断
        if (StringUtils.checkValNull(end)){
            endDate = new Date();
        }

        if (StringUtils.checkValNotNull(begin) && StringUtils.checkValNotNull(end)){
            beginDate = DBGDateUtils.getInstance().formatDate(begin);
            endDate = DBGDateUtils.getInstance().formatDate(end);
            // 判断搜索时间段是否为系统当天时间（通过end判断），且 搜索开始时间也为当天时间 则条件为从当天0点到系统此刻
            if(DBGDateUtils.getInstance().isToday(endDate) && DBGDateUtils.getInstance().isEquelOfDate(beginDate,endDate)) {
                endDate = new Date();
            }else {
                // 如果end时间范围条件不是系统当天，则 bengin为搜索当天的0时间整，end为Date + 1 天
                Calendar cd = Calendar.getInstance();
                cd.setTime(endDate);
                cd.add(Calendar.DATE,1);
                endDate = cd.getTime();
//                if (){
//
//                }
            }
        }

        // 如果搜索条件name为空，则搜索为两个日期内修改过的数据
        if (StringUtils.checkValNull(name)){
            return list(new QueryWrapper<CuPassword>().eq("cu_user_id" , cuUserId)
                    .between("gmt_modified" ,beginDate,endDate));
        }

        // 如果时间和name 条件都不为空，则搜索为，时间段内，包含name的值得模糊查询
        return list(new QueryWrapper<CuPassword>().eq("cu_user_id" , cuUserId)
                .between("gmt_modified" ,beginDate,endDate).like("name",name).like("login_name",name)
                .like("login_pwd",name).like("remark",name));
    }
}
